package com.gupao.alg.alg10;


public class Topic2_DeleteEqualToVal {

    /**
     * 数组中删除值为val的元素
     * 任务：
     * 实现removeElement1()和removeElement2()两个方法
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] nums1 = {3, 2, 2, 3};
        int[] nums2 = {0, 1, 2, 2, 3, 0, 4, 2};
        int val1 = 3;
        int val2 = 2;
        int testMethod = 1;

        switch (testMethod) {
            case 1:
                int newLen = removeElement1(nums1, val1);
                printList("删除3之后的结果为", nums1, newLen);
                break;
            case 2:
                int newLen2 = removeElement2(nums2, val1);
                printList("删除2之后的结果为", nums2, newLen2);
        }

    }

    /**
     * 两个双指针为快慢指针，都从前向后执行
     *
     * @param nums
     * @param val
     * @return
     */

    public static int removeElement1(int[] nums, int val) {
        //最后剩余元素的数量
        int ans = 0;

        int fast, slow = 0;
        for (fast = 0; fast < nums.length; fast++) {
            if (nums[fast] != val) {
                nums[slow] = nums[fast];
                slow++;
                ans++;
            }
        }
        return ans;
    }

    /**
     * 使用for循环精简上面的代码
     *
     * @param nums
     * @param val
     * @return
     */
    public static int removeElement1_1(int[] nums, int val) {
        int ans = 0;
        for (int num : nums) {
            if (num != val) {
                nums[ans] = num;
                ans++;
            }
        }
        //最后剩余元素的数量
        return ans;

    }


    /**
     * 两个双指针为分别从前向后和从后向前的指针
     *
     * @param nums
     * @param val
     * @return
     */
    public static int removeElement2(int[] nums, int val) {
        return 0;
    }

    /**
     * 打印处理之后的结果
     *
     * @param msg  文本提示信息
     * @param arr  数组
     * @param size 输出信息的大小
     */
    public static void printList(String msg, int[] arr, int size) {
        System.out.println(msg);
        for (int i = 0; i < size; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}
